#pragma once
#include <vector>
#include "Floor.h"
#include "renderFloor.h"
#include "renderExit.h"
#include "renderWaterFloor.h"
#include "renderFireFloor.h"
#include "renderBlock.h"
#include "renderImoBlock.h"
#include "renderStairs.h"
#include "renderTait.h"
#include "renderBomb.h"
#include "renderGravel.h"
#include "renderDissolve.h"
#include "renderForce.h"
#include "renderWall.h"
#include "renderIceFloor.h"
#include "renderKey.h"
#include "renderGate.h"
#include "renderFrog.h"
#include "renderAnt.h"
#include "renderPotato.h"
#include "renderBoots.h"

using namespace std;

class Render
{
private:

	GLdouble camX, camY, camZ;

	renderFloor *BasicFloor;
	renderFireFloor *FireFloor;
	renderIceFloor *IceFloor;
	renderWaterFloor *WaterFloor;
	renderImoBlock *ImoBlock;
	renderTait *Tait;
	renderBomb *Bomb;
	renderGravel *Gravel;
	renderDissolve *Dissolve;
	renderForce *Force;
	renderWall *Wall;
	renderBlock *Block;
	renderKey *Key;
	renderGate *Gate;
	renderExit *Exit;
	renderBoots *Skates;
	renderBoots *Fireboots;
	renderStairs *Stairs;
	renderFrog *Frog;
	renderAnt *Ant;
	renderPotato *Potato;
	renderFloor *BlockSwitch;
	
	vector<vector<vector<Floor*>>> map;
	int x; int y; int z;
	int lastx; int lasty;
	int xrot; int yrot; int zZoom;

public:
	Render(void);
	~Render(void);
	void doRender(vector<int> r);
	void updateSize(int init_x, int init_y, int init_z);
	// DOES THE UNPROJECTION, RETURNS posX, posY, posZ
	void unProject(int x, int y);
	void doLighting(vector<int> r);
	void wheel(int dir);
	void changeCamera(int x, int y);
	void Look(vector<int> r);
	void PrepTextures();
	void UpdateMap(vector<vector<vector<Floor*>>> mapPointer, int init_x, int init_y, int init_z);
};